package com.kk.base.dao.admin;

import com.kk.base.entity.admin.UserRoleTypeEnum;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import com.kk.base.entity.admin.User;

import java.util.List;

/**
 * 用户数据库处理层
 * @author Administrator
 *
 */
@Repository
public interface UserDao extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
	
	/**
	 * 按照用户名查找用户信息
	 * @param username
	 * @return
	 */
	public User findByUsername(String username);

	/**
	 * 查询网点和运输点
	 * @param userRoleType1
	 * @param userRoleType2
	 * @return
	 */
	@Query("select u from User u where u.userType = :userRoleType1 or u.userType = :userRoleType2")
	List<User> findByUserTypeTwo(@Param("userRoleType1")UserRoleTypeEnum userRoleType1,@Param("userRoleType2")UserRoleTypeEnum userRoleType2);

	/**
	 * 根据后台用户类型查询
	 * @param UserRoleType
	 * @return
	 */
	List<User> findByUserType(UserRoleTypeEnum UserRoleType);


	/**
	 * 查询省市区下可用的网点
	 * @param UserRoleType
	 * @param address
	 * @param status
	 * @return
	 */
	List<User> findByUserTypeAndAddressAndStatus(UserRoleTypeEnum UserRoleType,String address,Integer status);

	/**
	 * 根据用户id查询
	 * @param id
	 * @return
	 */
	@Query("select u from User u where id = :id")
	User find(@Param("id")Long id);

	/**
	 * 根据网点和用户类型查询快递员
	 * @param UserRoleType
	 * @return
	 */
	List<User> findByUserTypeAndBranchId(UserRoleTypeEnum UserRoleType,Long branchId);

	/**
	 * 根据网点和用户类型查询快递员和状态
	 * @param UserRoleType
	 * @return
	 */
	List<User> findByUserTypeAndBranchIdAndStatus(UserRoleTypeEnum UserRoleType,Long branchId,int status);

	/**
	 * 查询没有被冻结的用户
	 * @param UserRoleType
	 * @param status
	 * @return
	 */
	List<User> findByUserTypeAndStatus(UserRoleTypeEnum UserRoleType,int status);

	/**
	 * 根据网点和用户类型查询快递员
	 * @param UserRoleType
	 * @return
	 */
	Long countByUserTypeAndBranchId(UserRoleTypeEnum UserRoleType,Long branchId);


	
}
